gsk: Clip shadow node before push_group()
authorBenjamin Otte <otte@redhat.com>
Thu, 13 Feb 2020 00:53:12 +0000 (01:53 +0100)
committerBenjamin Otte <otte@redhat.com>
Thu, 13 Feb 2020 06:36:38 +0000 (07:36 +0100)
We want to be sure to push a group that's as small as possible, so we
clip to the child's bounds, because that's the smallest we can go.

gsk/gskrendernodeimpl.c

index d8bec7047e7ee3b3c848aa325453904c9ef54838..aad1fa59ef86547d98381d78bcd732539737480f 100644 (file)
@@ -2899,9 +2899,14 @@ gsk_shadow_node_draw (GskRenderNode *node,
   cairo_pattern_t *pattern;
   gsize i;
 
+  cairo_save (cr);
+  /* clip so the push_group() creates a small surface */
+  gsk_cairo_rectangle (cr, &self->child->bounds);
+  cairo_clip (cr);
   cairo_push_group (cr);
   gsk_render_node_draw (self->child, cr);
   pattern = cairo_pop_group (cr);
+  cairo_restore (cr);
 
   for (i = 0; i < self->n_shadows; i++)
     {